import BaseGraphic from "../../base/BaseGraphic.js";
import CommonUtil from "../../util/commonUtil.js";

/**
 * Entity实体基类
 * @class
 * @extends graphic.entity.BaseGraphic
 */
class BaseEntity extends BaseGraphic {
  /**
   * 实体对象
   * @type {Cesium.Entity}
   * @private
   */
  _entity = null;

  /**
   * 父实体对象
   * @type {Cesium.Entity}
   * @private
   */
  _parentEntity = null;

  /**
   * 构造函数
   * @param {Object} options 选项参数
   * @param {Array.<Number>|Cesium.Cartesian3} [options.position=[111, 28, 0]] 【点状】矢量数据时的坐标位置，具体看子类实现
   * @param {Array.<Cesium.Cartesian3> | Array} [options.positions] 【线面状（多点）】矢量数据时的坐标位置，具体看子类实现
   * @param {Object} [options.style] 矢量数据的 样式信息，具体见各类数据的说明
   */
  constructor(options) {
    super(options);
    this.checkPosition();
    this.createEntity();
  }

  /**
   * 检查位置参数是否有效
   */
  checkPosition() {
    if (!this._position || !this._positions) {
      throw new Error("position or positions is required");
    }
  }

  /**
   * 创建实体对象
   */
  createEntity() {
    this._entity = new Cesium.Entity(this.style);
  }

  /**
   * 设置父实体对象
   * @param {Cesium.Entity} parentEntity 父实体对象
   */
  set parentEntity(parentEntity) {
    this._parentEntity = parentEntity;
  }

  /**
   * 获取父实体对象
   * @returns {Cesium.Entity} 父实体对象
   */
  get parentEntity() {
    return this._parentEntity;
  }

  /**
   * 设置实体对象
   * @param {Cesium.Entity} entity 实体对象
   */
  set entity(entity) {
    this._entity = entity;
  }

  /**
   * 获取实体对象
   * @returns {Cesium.Entity} 实体对象
   */
  get entity() {
    return this._entity;
  }
}
export default BaseEntity;
